<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入Vue -->
    <script src="../js/vue.js"></script>
    <title>02_天气案例_监视属性</title>
</head>
<body>
    
    <!-- 
        监视属性 watch:
            1.当被监视的属性变化时，回调函数自动调用，进行相关操作
            2.监视的属性必须存在，才能进行监视!! （注意：写上不存在的监视属性也不会报错）
            3.监视的两种写法：
                (1).new Vue 时传入 watch 配置
                (2).通过 vm.$watch 监视

            补充：不仅可以监视data属性，计算属性也可以监视
     -->


    <!-- 容器 -->
    <div id="root">
        <h2>今天天气很{{hot}}</h2>
 
        <button @click="changeWeather($event)">切换天气</button>
        
    </div>

    <script type="text/javascript">
       Vue.config.productionTip=false; // 阻止 vue 在启动时生成生产提示。

       
    const vm =   new Vue({
        el:'#root',
        data() {
            return {
                isHot:true
            }
        },
        computed:{
            hot(){
                return this.isHot ? '炎热' : '凉爽';
            }
        },
        methods: {
            changeWeather(){
                this.isHot = !this.isHot;
            }
        },
        // 监视属性：不仅可以监视data属性，计算属性也可以监视
        // watch:{
        //     isHot:{
        //         immediate:true, // 初始化时让handler调用一次

        //         // handler什么时候调用？当 isHot 发生改变时。
        //         handler(newVlaue,oldValue){
        //             console.log('@IsHot修改了：',newVlaue,oldValue);
        //         }
        //     }
        // }
          
      })

      // 监视属性第二种写法
      vm.$watch('isHot',{
        immediate:true, // 初始化时让handler调用一次

        // handler什么时候调用？当 isHot 发生改变时。
        handler(newVlaue,oldValue){
            console.log('@IsHot修改了：',newVlaue,oldValue);
        }
      })
 
       
    </script>
</body>
</html>